package fr.afcepf.ai91.qualimetrie.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import fr.afcepf.ai91.qualimetrie.entity.Personne;
import fr.afcepf.ai91.qualimetrie.util.UtilConnexionAi91;
/**
 * Implementation des fonctionnalites liees a
 * l'entitee Personne dans la BDD 'qualimetrie'.
 * @author Stagiaire
 *
 */
public class DaoPersonneImpl
       implements IDaoPersonne {
    /**
     * requete pour ajouter une personne dans la
     * BDD.
     */
    private final String reqAjout =
            "INSERT INTO personne "
            + "(nom,prenom,adresse,date_naissance) "
            + "VALUES (?,?,?,?)";
    /**
     * indice du parametre nom de la requete.
     */
    private final int indiceNomAjout = 1;
    /**
     * indice du parametre prenom de la requete.
     */
    private final int indicePrenomAjout = 2;
    /**
     * indice du parametre adresse de la requete.
     */
    private final int indiceAdresseAjout = 3;
    /**
     * indice du parametre date_naissance de
     * la requete.
     */
    private final int indiceNaissanceAjout = 4;
    @Override
    public Personne ajouter(Personne paramPers) {
        Connection cnx = UtilConnexionAi91.getConnection();
        try {
            //Creation du preparedStatement en lui donnant
            // la requete parametree
            PreparedStatement pstmt =
                cnx.prepareStatement(
                reqAjout, Statement.RETURN_GENERATED_KEYS);
            // Affectation des valeus aux parametres.
            pstmt.setString(indiceNomAjout,
                    paramPers.getNom());
            pstmt.setString(indicePrenomAjout,
                    paramPers.getPrenom());
            pstmt.setDate(indiceNaissanceAjout,
                new java.sql.Date(
                    paramPers.getDateNaissance()
                             .getTime()));
            pstmt.setNull(indiceAdresseAjout,
                          Types.INTEGER);
            // Execution de la requete
            // Verification qu'elle a bien ajouter une ligne
            if (pstmt.executeUpdate() == 1) {
                //recuperation la cle primaire generee.
                ResultSet rs = pstmt.getGeneratedKeys();
                if (rs.next()) {
                    //affectation de l'id a la Personne.
                    paramPers.setId(rs.getInt(1));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return paramPers;
    }

    @Override
    public Personne associerAdresse(Personne paramPers) {
        // TODO Auto-generated method stub
        return null;
    }

}
